package com.company;
// JMM 指令重排序 - 单例模式
public class C10JMMOrderlySingleton {

//    public static C10JMMSingleton instance = null;
public volatile static C10JMMOrderlySingleton instance = null;
    public C10JMMOrderlySingleton getInstance(){
        if (instance==null){
            synchronized (C10JMMOrderlySingleton.class){
                  if (instance==null){
                      // 这里可能发生指令重排，
                      // 1：instance init构造执行
                      // 2：引用地址付给Instance
//                      1，和2的顺序是可能调换 -》其它线程会得到不完整的instance对象（2没有执行的对象）
//                      解决方案加入 volatile关键字
                      instance=new C10JMMOrderlySingleton();
                  }
            }
        }else{;
        }
        return instance;
    }

}

